package cn.iocoder.yudao.module.infra.service.category;

import cn.iocoder.yudao.module.infra.controller.admin.category.vo.CategoryListVO;
import cn.iocoder.yudao.module.infra.controller.admin.category.vo.CategorySaveReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.category.vo.CategorySimpleRespVO;
import cn.iocoder.yudao.module.infra.controller.admin.category.vo.CategoryTableRespVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.category.CategoryDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

public interface CategoryService {
    /**
     * 创建学生课程
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCategory(@Valid CategorySaveReqVO createReqVO);

    /**
     * 更新学生课程
     *
     * @param updateReqVO 更新信息
     */
    void updateCategory(@Valid CategorySaveReqVO updateReqVO);

    /**
     * 删除学生课程
     *
     * @param id 编号
     */
    Boolean deleteCategory(Long id);

    List<CategoryDO> getCategoryList(CategoryListVO reqVO);

    List<CategoryDO> getSimpleCategoryList(CategoryListVO pageReqVO);

    List<CategoryDO> getAllSimpleCategoryList(CategoryListVO vo);

    /**
     * 根据Code查询分类，不包含Code本级分类
     * @param code
     * @return
     */
    List<CategoryDO> getCategoryByCode(String code);

    CategoryTableRespVO getCategory(Long id);

    /**
     * 树结构返回分类
     * @param categoryListVO
     * @return
     */
    List<CategorySimpleRespVO> tree(CategoryListVO categoryListVO);

    List<CategorySimpleRespVO> tree(CategoryListVO categoryListVO, Map<String,Long> countMap);
}
